/***************************************************************************//**
 * @file     csa37f7x_system.h
 * @version  V1.0.0
 * @author   Chipsea MCU Group
 * @date     2020-10-23 PM
 * @brief    该文件包含了SYSTEM各功能参数的定义和函数接口声明
 * 
 * @copyright Copyright (C) 2020 Chipsea Technologies Corp. All rights reserved.
 ****************************************************************************
* @attention
 *	硬件平台: CSA37F70 评估板V1.0 \n
 *	SDK版本：  CSA37F7X_SDK_1.0.0
 * 
 * @par 修改日志:
 * <table>
 * <tr><th>Date 	   <th>Version	<th>Author	            <th>Description
 * <tr><td>2020/10/21  <td>1.0.0    <td>Chipsea MCU Group	<td>创建初始版本
 * </table>
 *
 *****************************************************************************/
#ifndef __CSA37F7X_SYSTEM_H__
#define __CSA37F7X_SYSTEM_H__

// Include external header file.
#include "csa37f7x.h"

#ifdef __cplusplus
extern "C" {
#endif

/** @addtogroup SYSTEM 系统管理器(SYSTEM)
  Configuration of the M0 Processor and Core Peripherals:。<br>
###特性: 
    - 上电后自动加载到寄存器，从而可被软件读取的芯片出厂信息
    - 引脚复用功能选择配置寄存器，用于软件配置引脚复用功能
    - 寄存器写保护控制寄存器
  @{
*/


 /**
 * @brief: 系统IO引脚选择定义
 * @var mfp_func_t::
 *|chip_model  |mfp_io_t    |func        |Descriptions
 *| :----: 	   | :----:     | :----:     | :---- |
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F70    |MFP_PA_0    |MFP_FUNC_0  |PA0默认
 *                          ---------------------
 *|CSA37F71	    			|MFP_FUNC_0	 |PA0默认
 *							|MFP_FUNC_1	 |AIN0
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F70    |MFP_PA_1    |MFP_FUNC_0  |PA1默认
 *                          ---------------------
 *|CSA37F71	    			|MFP_FUNC_0	 |PA1默认 
 *							|MFP_FUNC_1	 |AIN1
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_PA_2    |MFP_FUNC_0  |PA2默认
 *                          |MFP_FUNC_1  |UART TX
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_PA_3    |MFP_FUNC_0  |PA3默认
 *                          |MFP_FUNC_1  |UART RX
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F70    |MFP_PA_4    |MFP_FUNC_0  |PA4默认
 *                          |MFP_FUNC_2  |AIN20
 *                          |MFP_FUNC_3  |TKP10
 *|CSA37F71	    			|MFP_FUNC_0  |PA4默认
 *                          |MFP_FUNC_2  |AIN18
 *                          |MFP_FUNC_3  |AIN18
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F70    |MFP_PA_5    |MFP_FUNC_0  |PA5默认
 *                          |MFP_FUNC_2  |AIN21
 *                          |MFP_FUNC_3  |TKN10
 *                          ---------------------
 *|CSA37F71	    			|MFP_FUNC_0  |PA5默认
 *                          |MFP_FUNC_2  |AIN19
 *                          |MFP_FUNC_3  |AIN19
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F70    |MFP_PA_6    |MFP_FUNC_0  |PA6默认
 *                          |MFP_FUNC_2  |AIN22
 *                          |MFP_FUNC_3  |TKP11
 *                          ---------------------
 *|CSA37F71	    			|MFP_FUNC_x	 |PA6默认
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F70    |MFP_PA_7    |MFP_FUNC_0  |PA7默认
 *                          |MFP_FUNC_2  |AIN23
 *                          |MFP_FUNC_3  |TKN11
 *                          ---------------------
 *|CSA37F71	    			|MFP_FUNC_x	 |PA7默认
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F70    |MFP_PA_8    |MFP_FUNC_0  |PA8默认 
 *                          |MFP_FUNC_1  |AIN24
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F70    |MFP_PA_9    |MFP_FUNC_0  |PA9默认
 *                          |MFP_FUNC_1  |AIN25
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_PA_10   |MFP_FUNC_0  |PA10默认
 *                          |MFP_FUNC_2  |SCL
 *                          |MFP_FUNC_3  |TX
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_PA_11   |MFP_FUNC_0  |PA11默认
 *                          |MFP_FUNC_2  |SDA
 *                          |MFP_FUNC_3  |RX
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_PB_0    |MFP_FUNC_0  |PB0默认
 *                          |MFP_FUNC_1  |VS0
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_PB_1    |MFP_FUNC_0  |PB1默认
 *                          |MFP_FUNC_1  |VS1
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_PB_2    |MFP_FUNC_0  |PB1默认
 *                          |MFP_FUNC_1  |VS2
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_PB_3    |MFP_FUNC_0  |PB3默认
 *                          |MFP_FUNC_1  |TX
 *                          |MFP_FUNC_2  |SHIELD
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_PB_4    |MFP_FUNC_0  |SWCLK默认
 *                          |MFP_FUNC_1  |PB4
 *                          |MFP_FUNC_2  |MCO
							|MFP_FUNC_3  |PB4 (仅CSA37F71存在)
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_PB_5    |MFP_FUNC_0  |SWDIO默认
 *                          |MFP_FUNC_1  |PB4
 *                          |MFP_FUNC_2  |TIM0_CH
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN0    |MFP_FUNC_0  |AIN0默认
 *                          |MFP_FUNC_1  |TKP0
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN1    |MFP_FUNC_0  |AIN1默认
 *                          |MFP_FUNC_1  |TKN0
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN2    |MFP_FUNC_0  |AIN2默认
 *                          |MFP_FUNC_1  |TKP1
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN3    |MFP_FUNC_0  |AIN3默认
 *                          |MFP_FUNC_1  |TKN1
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN4    |MFP_FUNC_0  |AIN4默认
 *                          |MFP_FUNC_1  |TKP2
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN5    |MFP_FUNC_0  |AIN5默认
 *                          |MFP_FUNC_1  |TKN2
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN6    |MFP_FUNC_0  |AIN6默认
 *                          |MFP_FUNC_1  |TKP3
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN7    |MFP_FUNC_0  |AIN7默认
 *                          |MFP_FUNC_1  |TKN3
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN8    |MFP_FUNC_0  |AIN8默认
 *                          |MFP_FUNC_1  |TKP4
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN9    |MFP_FUNC_0  |AIN9默认
 *                          |MFP_FUNC_1  |TKN4
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN10   |MFP_FUNC_0  |AIN10默认
 *                          |MFP_FUNC_1  |TKP5
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN11   |MFP_FUNC_0  |AIN11默认
 *                          |MFP_FUNC_1  |TKN5
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN12   |MFP_FUNC_0  |AIN12默认
 *                          |MFP_FUNC_1  |TKP6
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN13   |MFP_FUNC_0  |AIN13默认
 *                          |MFP_FUNC_1  |TKN6
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN14   |MFP_FUNC_0  |AIN14默认
 *                          |MFP_FUNC_1  |TKP7
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN15   |MFP_FUNC_0  |AIN15默认
 *                          |MFP_FUNC_1  |TKN7
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN16   |MFP_FUNC_0  |AIN16默认
 *                          |MFP_FUNC_1  |TKP8
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN17   |MFP_FUNC_0  |AIN17默认
 *                          |MFP_FUNC_1  |TKN8
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN18   |MFP_FUNC_0  |AIN18默认
 *                          |MFP_FUNC_1  |TKP9
 *----------------------------------------------------------------------------------------------------------------
 *|CSA37F7x    |MFP_AIN19   |MFP_FUNC_0  |AIN19默认
 *             |MFP_FUNC_1  |TKN9
 *             
 *【注】 CSA37F7x:		表示CSA37F70/CSA37F71
 *		 MFP_FUNC_x:	表示MFP_FUNC_0~MFP_FUNC_3
 */				
typedef enum{
   
    MFP_PA_0 = 0,
    MFP_PA_1,
    MFP_PA_2,
    MFP_PA_3,
    MFP_PA_4,
    MFP_PA_5,
    MFP_PA_6,
    MFP_PA_7,
    MFP_PA_8,
    MFP_PA_9,
    MFP_PA_10,
    MFP_PA_11,
  
    MFP_PB_0 = 32,
    MFP_PB_1,
    MFP_PB_2,
    MFP_PB_3,
    MFP_PB_4,
    MFP_PB_5,
  
    MFP_AIN0 = 100,
    MFP_AIN1,
    MFP_AIN2,
    MFP_AIN3,
    MFP_AIN4,
    MFP_AIN5,
    MFP_AIN6,
    MFP_AIN7,
    MFP_AIN8,
    MFP_AIN9,
    MFP_AIN10,
    MFP_AIN11,
    MFP_AIN12,
    MFP_AIN13,
    MFP_AIN14,
    MFP_AIN15,
    MFP_AIN16,
    MFP_AIN17,
    MFP_AIN18,
    MFP_AIN19,
}mfp_io_t;
	
/**
* @brief  系统引脚功能选择
*/
typedef enum{
    MFP_FUNC_0 = 0,
    MFP_FUNC_1,
    MFP_FUNC_2,
    MFP_FUNC_3,
}mfp_func_t;

/**
* @brief  系统中断处理函数定义
*/
typedef enum{
    SCS_FUNC_PRI_11, 	/*!<SVCall优先级 */
    SCS_FUNC_PRI_14,	/*!<PendSV优先级 */
    SCS_FUNC_PRI_15,	/*!<SysTick优先级 */
}scs_shpr_func_t;

/**
* @brief  系统处理函数优先级定义
*/
typedef enum{
    SCS_FUNC_PRIORITY_HIGH = 0,		/*!<最高优先级 */
    SCS_FUNC_PRIORITY_MEDIUM = 1,	/*!<中优先级 */
    SCS_FUNC_PRIORITY_LOW = 2,		/*!<低优先级 */
    SCS_FUNC_PRIORITY_LOWEST = 3,	/*!<最低优先级 */
}scs_func_priority_t;


/**@brief		芯片唯一ID号查询
 *
 * @return		返回芯片唯一ID号
*/
uint32_t system_chip_uniquei_id_read(void);

/**@brief		系统GPIO多功能端口控制选择
 *
 * @param[in]	mfp_io_t	单个IO引脚选择
 * @param[in]	func		引脚功能选择
 * @return		无
*/
void system_io_multiples_set(mfp_io_t mfp_io, mfp_func_t func);

/**@brief		系统GPIO引脚功能查询
 *
 * @param[in]	mfp_io_t	单个IO引脚选择
 * @return		返回系统GPIO引脚的功能
*/
mfp_func_t  system_analog_multiplex(mfp_io_t mfp_io);

/**@brief		系统寄存器写保护解锁
 *
 * @return		无
*/
void system_reg_wrprot_unlock(void);

/**@brief		系统寄存器写保护加锁
 *
 * @return		无
*/
void system_reg_wrprot_lock(void);

/**@brief		系统寄存器写保护状态查询
 *
 * @return		0：被保护
 *              1：解锁
*/
uint8_t system_reg_wrprot_state_get(void);

/**@brief		系统温度传感器0校准值查询
 *
 * @return		返回系统温度传感器0校准值
*/
uint16_t system_temp0_trim_get(void);

/**@brief		系统温度传感器1校准值查询
 *
 * @return		返回系统温度传感器1校准值
*/
uint16_t system_temp1_trim_get(void);

/**@brief		处理器标识号状态查询

 * @return		返回处理器标识号
*/
uint32_t system_cpuid_read(void);

/**@brief		系统触发NMI中断使能，改变NMI异常状态为未处理

 * @return		无
*/
void system_nmi_error_state_set(void);

/**@brief		系统异常触发NMI中断状态获取

 * @return		返回NMI中断状态
 *              0：没有NMI 异常等待处理
 *              1: 有NMI异常等待处理
*/
uint8_t system_nmi_error_state_get(void);

/**@brief		系统异常触发pendsv中断状态使能，改变PendSV异常状态为未处理

 * @return		无
*/
void system_pendsv_error_state_set(void);

/**@brief		系统异常触发PendSV中断状态获取

 * @return		返回PendSV中断状态
 *              0：没有PendSV异常等待处理
 *              1: 有PendSV异常等待处理
*/
uint8_t system_pendsv_error_state_get(void);

/**@brief		系统异常状态清除PendSV中断

 * @return		无
*/
void system_pendsv_error_state_clear(void);

/**@brief		系统触发SysTick中断使能

 * @return		无
*/
void system_systick_interrupt_set (void);


/**@brief		系统触发SysTick中断查询

 * @return		返回SysTick中断状态
 *              1： 有SysTick中断等待处理
 *              0： 没有SysTick中断等待处理
*/
uint8_t system_systick_interrupt_get(void);

/**@brief		系统SysTick中断清除

 * @return		无
*/
void system_systick_interrupt_clear(void);

/**@brief		系统中断抢占位获取

 * @return		返回中断抢占状态
 *              1：当从调试状态退出时，未处理的异常将被处理
 *              0：无中断抢占
*/
uint8_t system_srpreempt_get(void);

/**@brief		系统中断等待处理标志位获取

 * @return		返回中断等待处理标志位状态
 *              1：有中断等待处理
 *              0：没有中断等待处理
*/
uint8_t system_isrpending_get(void);

/**@brief		系统等待处理的最高优先级异常号获取

 * @return		返回等待处理的最高优先级异常号
 *              非0：等待处理的最高优先级异常号
 *              0：没有中断等待处理
*/
uint8_t system_vectpending_get(void);

/**@brief		系统复位请求

 * @return		无
*/
void system_reset_req(void);

/**@brief		系统异常活动状态清除

 * @return		无
*/
void system_vectclkactive_clear(void);

/**@brief		系统异常活动状态清除

 * @return		无
*/
void system_sevonpend_enable(void);

/**@brief		系统未处理位发送事件禁用

 * @return		无
*/
void system_sevonpend_disable(void);

/**@brief		系统睡眠控制
 
 * @param[in]	mode 控制处理器进入睡眠模式
 *              1：深度睡眠
 *              0：睡眠
 * @return		无
*/
void system_sleepmode_set(uint8_t mode);

/**@brief		系统睡眠模式获取
 
 * @return		返回系统睡眠模式
 *              1：深度睡眠
 *              0：睡眠
*/
uint8_t system_sleepmode_get(void);


/**@brief		系统退出时睡眠使能控制
 
 * @param[in]   从Handler模式返回Thread模式时，是否进入睡眠模式
 *              1： 当从中断处理函数返回Thread模式时进入睡眠或者深度睡眠模式
 *              0： 返回Thread模式时，不要进入睡眠模式
 * @return		无
*/
void system_sleeponexit_set(uint8_t mode);


/**@brief		系统退出时睡眠使能控制状态查询
 
 * @return		返回系统退出时睡眠控制的状态
 *              1： 当从中断处理函数返回Thread模式时进入睡眠或者深度睡眠模式
 *              0： 返回Thread模式时，不要进入睡眠模式
*/
uint8_t system_sleeponexit_get(void);

/**@brief		系统处理函数优先级查询
 
  * @param[in]  func_index 系统处理函数选择
  *             SCS_FUNC_PRI_11，SVCall优先级
  *             SCS_FUNC_PRI_14，PendSV优先级
  *             SCS_FUNC_PRI_15，SysTick优先级
 * @return		返回系统处理函数的优先级
 *              3： 最低优先级
 *              1： 中优先级
 *              2： 低优先级
 *              0： 最高优先级
*/
scs_func_priority_t system_function_priority_get (scs_shpr_func_t func_index);


/**@brief		系统处理函数优先级设置
 
  * @param[in]  func_index 系统处理函数选择
  *             SCS_FUNC_PRI_11，SVCall优先级
  *             SCS_FUNC_PRI_14，PendSV优先级
  *             SCS_FUNC_PRI_15，SysTick优先级
 * @param[in]	priority_level	系统处理函数的优先级选择
 *              3： 最低优先级
 *              1： 中优先级
 *              2： 低优先级
 *              0： 最高优先级
 * @return      无
*/
void system_function_priority_set (scs_shpr_func_t func_index, scs_func_priority_t priority_level);

/**@brief		系统48M时钟频率配置
 
 * @return		无
*/
void sysclk_change_pll_48m(void);

/**@brief		系统24M时钟频率配置
 
 * @return		无
*/
void sysclk_change_pll_24m(void);

/**@brief		系统8M时钟频率配置
 
 * @return		无
*/
void sysclk_change_pll_8m(void);


/*@}*/ /* end of group SYSTEM */

#ifdef __cplusplus
}
#endif

#endif  //__CSA37F7X_SYSTEM_H__

/*** (C) COPYRIGHT 2020 Chipsea Technologies (Shenzhen) Corp. ***/
